// pages/partAdd/partAdd.js
const app = getApp();
import CommonService from '../../utils/service/commonService.js';
import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast';
const util = require('../../utils/util');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    //设备id
    equipmentId:null,
    //设备类型
    typeArr:[],
    //配件类型选择框
    showPartType:false,
    //配件类型选择数据
    partTypeList:[],
    //显示的配件类型
    partTypeName: '',
    //选择的配件类型
    partTypeObj:null,
    //参数列表
    paramList:[],
    //传参来的id
    id:null,
    //是否是修改
    isEdit:false,
    //修改信息回显
    editInfo:{},
    //提交按钮禁用
    disabled:false,    
    //上传的图片
    imgUrls:[] 
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    if(options.id){
      this.setData({ 
        id: parseInt(options.id),
        isEdit:true      
      })
      //获取要修改的数据
      this.getInfo(); 

    }else{
      this.setData({     
        equipmentId: parseInt(options.equipmentId),
        typeArr:JSON.parse(options.typeArr)         
      })
      //查询配件类型id
      this.getPartType();
    }  
  },  

  //查询配件类型id
  getPartType(){
    let param = {
      isAuth: false,
      className: 'equipmentCategory',
      data: {
        searchAll: true,
        id: this.data.typeArr,
        selectFields: ["id", "partTypeArr"]  
      }
    }

    CommonService.goFindList(param).then(res=>{
      if(res.data.data && res.data.data.result && res.data.data.result.length){
        let result=res.data.data.result;
        let arr=[];
        result.forEach(item => {
          if(item.partTypeArr && item.partTypeArr.length){
            arr=arr.concat(item.partTypeArr);
          }
        });

        //去重
        let arrSet=new Set(arr);
        arr=Array.from(arrSet);

        this.setData({
          partTypeArr: arr
        })

        //查询配件类型名称
        this.getPartTypeList();
        }
    }).catch((error) => {
    })
  },

  //查询配件类型信息
  getPartTypeList(){
    let param = {
      isAuth: false,
      className: 'partBase',
      data: {
        searchAll: true,
        id: this.data.partTypeArr,
        selectFields: ['id', 'name', 'param']
      }
    }

    CommonService.goFindList(param).then(res=>{
      if(res.data.data && res.data.data.result && res.data.data.result.length){
        let result=res.data.data.result;
        let arr=[];
        result.forEach(item => {
          arr.push({
            text:item.name,
            id:item.id,
            obj:item
          });
        });
        this.setData({
          partTypeList: arr
        })
      }
    }).catch((error) => {
    })
  },

  //显示配件类型
  onShowPartType(){
    this.setData({ 
      showPartType: true
    })    
  },

  //隐藏配件类型
  onClosePartType(){
    this.setData({ 
      showPartType: false
    })
  },

  //确认配件类型
  onConfirmPartType(e){     
    let info = e.detail.value;
    this.setData({
      partTypeObj: info.obj,
      partTypeName: info.obj.name,
      paramList:info.obj.param
    })
    this.onClosePartType();
  },

  //提交表单
  confirmForm(e){
    //避免表单重复提交-先禁用按钮
    this.setData({
      disabled:true
    })

    let obj=e.detail.value; 
    let paramList=this.data.paramList;    

    //获取参数值
    let paramArr=[];
    for(let key in obj){
      if(key!='name'){
        paramArr.push({
          type:key,
          value:obj[key].trim()
        });
      }
    }

    //把中文名和单位放进去
    for(let i=0;i<paramList.length;i++){
      paramArr.forEach(item => {
        if(paramList[i].type==item.type){
          item.name=paramList[i].name;
          item.unit=paramList[i].unit;
        }
      });
    }    

    let name=obj.name.trim(); 
    //非空验证
    if(!this.formNotEmpty(name,'nameMessage','请输入配件名称')){
      return;
    }    
    
    let dataObj={};
    if(this.data.isEdit){      
      dataObj={
        id:this.data.id,      
        name:name,
        partParams:paramArr,
        imgs:this.data.imgUrls
      }
    }else{
      //未选择类型
      if(this.data.partTypeObj && this.data.partTypeObj.id){
      }else{
        Toast.fail('请选择配件类型');
        return;
      }
      dataObj={             
        name:name,        
        partType:this.data.partTypeObj.id,
        equipmentId:this.data.equipmentId,
        partParams:paramArr,
        createUser:app.globalData.userInfo.id,
        createTime:util.timeFormat(new Date()),
        imgs:this.data.imgUrls
      }
    }

    let param={
      className:'part',
      data:dataObj
    }

    //避免表单重复提交
    Toast.loading({
      duration: 0,
      forbidClick: true,
      message: '数据提交中...'
    });

    //console.log(param);
     
    CommonService.goSave(param).then(res=>{
      this.setData({
        disabled:false
      })
      if (res.statusCode == 200 && res.data.success == true){
        Toast.success('成功');
        setTimeout(() => {
          //返回列表页并刷新数据
          this.backAndRefresh();
        }, 1000);
      }else if(res.statusCode==202){
        Toast.fail('您操作太快了,请勿重复提交');
      }else{
        Toast.fail('操作失败');
      }
    }).catch((error) => {
      Toast.fail('操作失败');
    })
  },  

  //非空验证（field要先去掉空格）
  formNotEmpty(field,messageField,messageCon){    
    if(!field){
      let obj = {};
      obj[messageField] = messageCon;
      obj['disabled'] = true;
      this.setData(obj);
      return false;
    }else{
      return true;
    }
  },   

  //用户输入时清除错误提示
  clearMessage(e) {
    let field = e.target.dataset.message;
    let obj = {};
    obj[field] = "";
    obj['disabled'] = false;
    this.setData(obj);
  },  

  //获取要修改的数据
  getInfo(){
    let param={
      source:"小程序，添加配件，查询某一个配件",
      className:"com.jbn.model.part.Part",
      checkDataAuthority:false,
      condition:[{
        fieldName:"id",
        relation:"=",
        value:this.data.id
      }],
      lookup: [{
        localField: "partType",
        foreignField: "id",
        fromClassName: "com.jbn.model.part.PartBase",
        asField: "partTypeObj"
      }],         
    }
    CommonService.findList(param).then(res=>{
      if(res.data.data && res.data.data.length){        
        this.setData({ 
          editInfo: res.data.data[0] 
        })        
        //修改信息回显
        this.getInputValue();
      }
    }).catch((error) => {              
    })
  },

  //修改信息回显
  getInputValue(){
    let info=this.data.editInfo;
    console.log('配件修改信息回显');
    console.log(info);

    let param1=info.partParams;
    let param2=[];
    if(info.partTypeObj.length){
      param2=info.partTypeObj[0].param;
      for(let i=0;i<param2.length;i++){
        param1.forEach(item => {
          if(param2[i].type==item.type){
            param2[i].value=item.value;
          }
        });        
      }
    }else{
      param2=param1;
    }  

    this.setData({      
      paramList: param2          
		})
  },

  //返回列表页并刷新数据
  backAndRefresh(){    
    let pages = getCurrentPages();
    let prevPage = pages[pages.length - 2];    
    prevPage.refreshListAndPage();
    wx.navigateBack();    
  },

  //获取图片上传组件的传值
  getUploadUrl(data){
    let imgUrls=data.detail;
    if(imgUrls.length){
      this.setData({ 
        imgUrls: imgUrls 
      })
    }
  },
  
  //保存日志
  saveLog(obj){
    let business='part_edit';
    let operateType='submit';
    let dataId=obj.data.id;
    let className=obj.className;
    let data=obj.data;

    CommonService.saveLog(business,operateType,dataId,className,data).then(res=>{       
    }).catch((error) => {                
    }) 
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  }  
})